import CryptoJS from 'crypto-js';

// 必须与后端保持一致
const SECRET_KEY = '68e5f394ccd1483e9b9acb230224d5f7';

/**
 * AES 解密方法
 * @param {string} encryptedData 加密的字符串
 * @returns {any} 解密后的原始数据
 */
export const decrypt = (encryptedData: any) => {
  try {
    // 先进行Base64解码
    const encryptedBase64 = CryptoJS.enc.Base64.parse(encryptedData);
    const encryptedHex = encryptedBase64.toString(CryptoJS.enc.Hex);

    // 解密
    const bytes = CryptoJS.AES.decrypt(
      { ciphertext: CryptoJS.enc.Hex.parse(encryptedHex) },
      CryptoJS.enc.Utf8.parse(SECRET_KEY),
      {
        mode: CryptoJS.mode.ECB, // 根据后端设置调整
        padding: CryptoJS.pad.Pkcs7,
      },
    );

    const decrypted = bytes.toString(CryptoJS.enc.Utf8);

    if (!decrypted) {
      throw new Error('解密结果为空，可能是密钥错误');
    }

    return JSON.parse(decrypted);
  } catch (error: any) {
    console.error('解密失败:', {
      error,
      input: encryptedData,
      key: SECRET_KEY,
    });
    throw new Error('数据解密失败: ' + error.message);
  }
};

/**
 * AES 加密方法（可选，如果前端也需要加密请求数据）
 */
export function encrypt(data: any) {
  return CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY).toString();
}
